package com.tbit.uqbike.service.business.operationsanalysis;

import com.tbit.manager.api.dto.UserStatParam;
import com.tbit.manager.api.vo.LineChartData;
import com.tbit.manager.api.vo.PieChartData;


import java.util.List;

/**
 * 用户分析Service接口
 *
 * @author <a href="mailto:chen.wutian@tbit.com.cn">BUGTian</a>
 * @since 2025/2/27
 */
public interface UserOAService {

    /**
     * 用户总数
     * @param param 统计参数
     * @return 用户总数 ， 截至时间右区间
     */
    Long totalUserCount(UserStatParam param);

    /**
     * 实名用户数
     * @param param 统计参数
     * @return 实名用户数 ， 截至时间右区间
     */
    Long nameAuthUserCount(UserStatParam param);


    /**
     * 时间区间内的新增用户数
     * @param param 统计参数
     * @return 区间 时间端内的新增用户数
     */
    Long newUserCount(UserStatParam param);

    /**
     * 会员用户数
     * @param param 统计参数
     * @return 会员用户数 - 截至时间右区间
     */
    Long vipUserCount(UserStatParam param);

    /**
     * 新增用户数 - 日增长折线图
     * @param param 统计参数
     * @return 新增用户数 - 日折线图 - 指定区间
     */
    List<LineChartData> newUserLineChart_Day(UserStatParam param);

    /**
     * 新增会员数 - 日增长折线图
     * @param param 统计参数
     * @return 新增会员数 - 日折线图 - 指定区间
     */
    List<LineChartData> newVipLineChart_Day(UserStatParam param);

    /**
     * 用户年龄段分布 - 饼状图
     * @param param 统计参数
     * @return 用户年龄段分布 - 饼状图 - 指定区间
     */
    List<PieChartData> ageDistributionPieChart(UserStatParam param);

    /**
     * 用户性别分布 - 饼状图
     * @param param 统计参数
     * @return 用户性别分布 - 饼状图 - 指定区间
     */
    List<PieChartData> sexDistributionPieChart(UserStatParam param);

}
